function R = compute_rate(rho, sigma2, w, t, r, lambda, d, M)
    % 输入参数说明：
    % rho: 路径损耗因子
    % sigma2: 噪声功率
    % w: 波束成形向量
    % t: 天线位置向量 (N×2矩阵)
    % r: 接收端位置 (1×2向量)
    % lambda: 信号波长
    % d: 子阵列天线单元间距
    % M: 子阵列天线单元数量

    % $R= \log _2\left ( 1+ \Gamma \right )$
    % \Gamma=\frac{\left|\mathbf{h}^H\mathbf{w}\right|^2}{\sigma^2}, 
    % \bfm{h} = \rho \mathbf{g}(\boldsymbol{t},\bfm{r})
    % \bfm{h}_w = \rho \mathbf{g}(\boldsymbol{t},\bfm{r}_w)
    % \mathbf{g}(\boldsymbol{t},\bfm{x}) & = \left[ \mathbf{a}(\bfm{t}_1,\bfm{x})^T, \mathbf{a}(\bfm{t}_2,\bfm{x})^T, \cdots, \mathbf{a}(\bfm{t}_N,\bfm{x})^T  \right]^T \\
    % & = \left[e^{-j\frac{2\pi}{\lambda}(r_{1}+\frac{M-1}{2}d\operatorname{sin}{\theta})}, 
    % \cdots, 
    % e^{-j\frac{2\pi}{\lambda} ( r_{1}-\frac{M-1}{2}d\operatorname{sin}{\theta} ) }, 
    % \right. \\
    % & \left. \quad \cdots, 
    % e^{-j\frac{2\pi}{\lambda} ( r_{N}+\frac{M-1}{2}d\operatorname{sin}{\theta} ) },
    % \cdots,
    % e^{-j\frac{2\pi}{\lambda} ( r_{N}-\frac{M-1}{2}d\operatorname{sin}{\theta} )}
    % \right]^T  \in \mathcal{C}^{NM \times 1}

      % 获取天线数量
      N = size(t, 2); % 天线数 N

      % 初始化信道方向向量 g
      g = zeros(N * M, 1); % (NM×1复向量)
    
      % 构造信道方向向量 g(t, r)
      for n = 1:N
          % 计算从第n个子阵列中心到接收端的距离
          r_n = norm(t(:, n) - r); 
        
          % 计算第n个天线的阵列响应向量
          theta = atan2(r(2) - t(2, n), r(1) - t(1, n)); % 方向角   % 这里存疑，因为这里的t(:, n)应该用预设的
          a_n = zeros(M, 1); % 子阵列响应向量
          for m = 1:M
              % 根据公式计算
              a_n(m) = exp(-1j * 2 * pi / lambda * (r_n + (m - (M-1)/2) * d * sin(theta)));
          end
          % 将 a_n 拼接到 g
          g((n-1)*M+1 : n*M) = a_n;
      end  

      % 信道向量 h
      h = rho * g;

    % 计算 SNR: Gamma
    Gamma = abs(h' * w)^2 / sigma2;

    % 计算通信速率 R
    R = log2(1 + Gamma);
end
